package com.ruoyi.statistic.mapper;

import com.ruoyi.common.annotation.DataSource;
import com.ruoyi.common.enums.DataSourceType;
import com.ruoyi.statistic.domain.StatisticStudentBaseInfo;
import com.ruoyi.statistic.domain.vo.BaseDepartmentVo;
import com.ruoyi.statistic.domain.vo.BaseMajorVo;
import com.ruoyi.statistic.domain.vo.StatisticStudentListSearchVo;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface StatisticStudentBaseInfoMapper {
    /**
     * 查询学生管理
     *
     * @param id 学生管理主键
     * @return 学生管理
     */
    public StatisticStudentBaseInfo selectStatisticStudentBaseInfoById(Long id);


    /**
     * 查询学生管理
     *
     * @param code
     * @return
     */
    public StatisticStudentBaseInfo selectStatisticStudentBaseInfoByCode(String code);

    /**
     * 查询学生管理列表
     *
     * @param statisticStudentBaseInfo 学生管理
     * @return 学生管理集合
     */
    public List<StatisticStudentBaseInfo> selectStatisticStudentBaseInfoList(StatisticStudentBaseInfo statisticStudentBaseInfo);


    /**
     * 查询学生管理列表
     *
     * @param statisticStudentListSearchVo
     * @return
     */
    public List<StatisticStudentBaseInfo> selectStatisticStudentBaseInfoListBySearchVo(StatisticStudentListSearchVo statisticStudentListSearchVo);


    /**
     * 查询学生管理列表（针对辅导员，返回全国系统上人数）
     *
     * @param statisticStudentListSearchVo
     * @return
     */
    public List<StatisticStudentBaseInfo> selectCounsellorStatisticStudentBaseInfoListBySearchVo(StatisticStudentListSearchVo statisticStudentListSearchVo);



    /**
     * 新增学生管理
     *
     * @param statisticStudentBaseInfo 学生管理
     * @return 结果
     */
    public int insertStatisticStudentBaseInfo(StatisticStudentBaseInfo statisticStudentBaseInfo);

    /**
     * 修改学生管理
     *
     * @param statisticStudentBaseInfo 学生管理
     * @return 结果
     */
    public int updateStatisticStudentBaseInfo(StatisticStudentBaseInfo statisticStudentBaseInfo);

    /**
     * 删除学生管理
     *
     * @param id 学生管理主键
     * @return 结果
     */
    public int deleteStatisticStudentBaseInfoById(Long id);

    /**
     * 批量删除学生管理
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteStatisticStudentBaseInfoByIds(Long[] ids);


    /**
     * 根据ids来获取StudentBaseInfo
     *
     * @param ids
     * @return
     */
    public List<StatisticStudentBaseInfo> selectStatisticStudentBaseInfoByIds(@Param("list") Long[] ids);


    /**
     * 更新学生辅导员
     *
     * @param code
     * @param counsellorCode
     */
    @DataSource(DataSourceType.MASTER)
    public void updateStatisticStudentCounsellor(@Param("code") String code, @Param("counsellorCode") String counsellorCode);


    /**
     * 批量更新系别专业
     *
     * @param code
     * @param department
     * @param major
     */
    @DataSource(DataSourceType.MASTER)
    public void batchUpdateDegree(@Param("code") String code, @Param("department") String department, @Param("major") String major);


    /**
     * 批量更新系别
     *
     * @param code
     * @param department
     */
    @DataSource(DataSourceType.MASTER)
    public void batchUpdateDepartment(@Param("code") String code, @Param("department") String department);


    /**
     * 批量更新专业
     *
     * @param code
     * @param major
     */
    @DataSource(DataSourceType.MASTER)
    public void batchUpdateMajor(@Param("code") String code, @Param("major") String major);


    /**
     * 基础学生数据系别统计
     *
     * @param year
     * @return
     */
    public List<BaseDepartmentVo> baseDepartmentCount(@Param("year") String year);

    /**
     * 计算男生数量
     *
     * @param year
     * @param department
     * @return
     */
    public Integer baseDepartmentBoyCount(@Param("year") String year, @Param("department") String department);


    /**
     * 计算女生数量
     *
     * @param year
     * @param department
     * @return
     */
    public Integer baseDepartmentGirlCount(@Param("year") String year, @Param("department") String department);


    /**
     * 基础学生数据专业统计
     *
     * @param year
     * @return
     */
    public List<BaseMajorVo> baseMajorCount(@Param("year") String year);
}
